package io.kubernetes.client.openapi.models;

import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.lang.String;
import java.lang.Boolean;
import java.util.Map;
import java.lang.Deprecated;
import java.util.LinkedHashMap;
import java.util.function.Predicate;
import java.util.List;
import io.kubernetes.client.fluent.Fluent;
import java.util.Collection;
import io.kubernetes.client.fluent.Nested;
import io.kubernetes.client.custom.Quantity;

public interface V1PersistentVolumeSpecFluent<A extends io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent<A>> extends io.kubernetes.client.fluent.Fluent<A> {


    public A addToAccessModes(int index,java.lang.String item);
    public A setToAccessModes(int index,java.lang.String item);
    public A addToAccessModes(java.lang.String... items);
    public A addAllToAccessModes(java.util.Collection<java.lang.String> items);
    public A removeFromAccessModes(java.lang.String... items);
    public A removeAllFromAccessModes(java.util.Collection<java.lang.String> items);
    public java.util.List<java.lang.String> getAccessModes();
    public java.lang.String getAccessMode(int index);
    public java.lang.String getFirstAccessMode();
    public java.lang.String getLastAccessMode();
    public java.lang.String getMatchingAccessMode(java.util.function.Predicate<java.lang.String> predicate);
    public java.lang.Boolean hasMatchingAccessMode(java.util.function.Predicate<java.lang.String> predicate);
    public A withAccessModes(java.util.List<java.lang.String> accessModes);
    public A withAccessModes(java.lang.String... accessModes);
    public java.lang.Boolean hasAccessModes();
    public A addNewAccessMode(java.lang.String original);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildAwsElasticBlockStore instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1AWSElasticBlockStoreVolumeSource getAwsElasticBlockStore();
    public io.kubernetes.client.openapi.models.V1AWSElasticBlockStoreVolumeSource buildAwsElasticBlockStore();
    public A withAwsElasticBlockStore(io.kubernetes.client.openapi.models.V1AWSElasticBlockStoreVolumeSource awsElasticBlockStore);
    public java.lang.Boolean hasAwsElasticBlockStore();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AwsElasticBlockStoreNested<A> withNewAwsElasticBlockStore();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AwsElasticBlockStoreNested<A> withNewAwsElasticBlockStoreLike(io.kubernetes.client.openapi.models.V1AWSElasticBlockStoreVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AwsElasticBlockStoreNested<A> editAwsElasticBlockStore();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AwsElasticBlockStoreNested<A> editOrNewAwsElasticBlockStore();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AwsElasticBlockStoreNested<A> editOrNewAwsElasticBlockStoreLike(io.kubernetes.client.openapi.models.V1AWSElasticBlockStoreVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildAzureDisk instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1AzureDiskVolumeSource getAzureDisk();
    public io.kubernetes.client.openapi.models.V1AzureDiskVolumeSource buildAzureDisk();
    public A withAzureDisk(io.kubernetes.client.openapi.models.V1AzureDiskVolumeSource azureDisk);
    public java.lang.Boolean hasAzureDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureDiskNested<A> withNewAzureDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureDiskNested<A> withNewAzureDiskLike(io.kubernetes.client.openapi.models.V1AzureDiskVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureDiskNested<A> editAzureDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureDiskNested<A> editOrNewAzureDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureDiskNested<A> editOrNewAzureDiskLike(io.kubernetes.client.openapi.models.V1AzureDiskVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildAzureFile instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1AzureFilePersistentVolumeSource getAzureFile();
    public io.kubernetes.client.openapi.models.V1AzureFilePersistentVolumeSource buildAzureFile();
    public A withAzureFile(io.kubernetes.client.openapi.models.V1AzureFilePersistentVolumeSource azureFile);
    public java.lang.Boolean hasAzureFile();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureFileNested<A> withNewAzureFile();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureFileNested<A> withNewAzureFileLike(io.kubernetes.client.openapi.models.V1AzureFilePersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureFileNested<A> editAzureFile();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureFileNested<A> editOrNewAzureFile();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureFileNested<A> editOrNewAzureFileLike(io.kubernetes.client.openapi.models.V1AzureFilePersistentVolumeSource item);
    public A addToCapacity(java.lang.String key,io.kubernetes.client.custom.Quantity value);
    public A addToCapacity(java.util.Map<java.lang.String,io.kubernetes.client.custom.Quantity> map);
    public A removeFromCapacity(java.lang.String key);
    public A removeFromCapacity(java.util.Map<java.lang.String,io.kubernetes.client.custom.Quantity> map);
    public java.util.Map<java.lang.String,io.kubernetes.client.custom.Quantity> getCapacity();
    public <K,V>A withCapacity(java.util.Map<java.lang.String,io.kubernetes.client.custom.Quantity> capacity);
    public java.lang.Boolean hasCapacity();
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildCephfs instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1CephFSPersistentVolumeSource getCephfs();
    public io.kubernetes.client.openapi.models.V1CephFSPersistentVolumeSource buildCephfs();
    public A withCephfs(io.kubernetes.client.openapi.models.V1CephFSPersistentVolumeSource cephfs);
    public java.lang.Boolean hasCephfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CephfsNested<A> withNewCephfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CephfsNested<A> withNewCephfsLike(io.kubernetes.client.openapi.models.V1CephFSPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CephfsNested<A> editCephfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CephfsNested<A> editOrNewCephfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CephfsNested<A> editOrNewCephfsLike(io.kubernetes.client.openapi.models.V1CephFSPersistentVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildCinder instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1CinderPersistentVolumeSource getCinder();
    public io.kubernetes.client.openapi.models.V1CinderPersistentVolumeSource buildCinder();
    public A withCinder(io.kubernetes.client.openapi.models.V1CinderPersistentVolumeSource cinder);
    public java.lang.Boolean hasCinder();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CinderNested<A> withNewCinder();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CinderNested<A> withNewCinderLike(io.kubernetes.client.openapi.models.V1CinderPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CinderNested<A> editCinder();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CinderNested<A> editOrNewCinder();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CinderNested<A> editOrNewCinderLike(io.kubernetes.client.openapi.models.V1CinderPersistentVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildClaimRef instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1ObjectReference getClaimRef();
    public io.kubernetes.client.openapi.models.V1ObjectReference buildClaimRef();
    public A withClaimRef(io.kubernetes.client.openapi.models.V1ObjectReference claimRef);
    public java.lang.Boolean hasClaimRef();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ClaimRefNested<A> withNewClaimRef();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ClaimRefNested<A> withNewClaimRefLike(io.kubernetes.client.openapi.models.V1ObjectReference item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ClaimRefNested<A> editClaimRef();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ClaimRefNested<A> editOrNewClaimRef();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ClaimRefNested<A> editOrNewClaimRefLike(io.kubernetes.client.openapi.models.V1ObjectReference item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildCsi instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1CSIPersistentVolumeSource getCsi();
    public io.kubernetes.client.openapi.models.V1CSIPersistentVolumeSource buildCsi();
    public A withCsi(io.kubernetes.client.openapi.models.V1CSIPersistentVolumeSource csi);
    public java.lang.Boolean hasCsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CsiNested<A> withNewCsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CsiNested<A> withNewCsiLike(io.kubernetes.client.openapi.models.V1CSIPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CsiNested<A> editCsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CsiNested<A> editOrNewCsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CsiNested<A> editOrNewCsiLike(io.kubernetes.client.openapi.models.V1CSIPersistentVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildFc instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1FCVolumeSource getFc();
    public io.kubernetes.client.openapi.models.V1FCVolumeSource buildFc();
    public A withFc(io.kubernetes.client.openapi.models.V1FCVolumeSource fc);
    public java.lang.Boolean hasFc();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FcNested<A> withNewFc();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FcNested<A> withNewFcLike(io.kubernetes.client.openapi.models.V1FCVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FcNested<A> editFc();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FcNested<A> editOrNewFc();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FcNested<A> editOrNewFcLike(io.kubernetes.client.openapi.models.V1FCVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildFlexVolume instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1FlexPersistentVolumeSource getFlexVolume();
    public io.kubernetes.client.openapi.models.V1FlexPersistentVolumeSource buildFlexVolume();
    public A withFlexVolume(io.kubernetes.client.openapi.models.V1FlexPersistentVolumeSource flexVolume);
    public java.lang.Boolean hasFlexVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlexVolumeNested<A> withNewFlexVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlexVolumeNested<A> withNewFlexVolumeLike(io.kubernetes.client.openapi.models.V1FlexPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlexVolumeNested<A> editFlexVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlexVolumeNested<A> editOrNewFlexVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlexVolumeNested<A> editOrNewFlexVolumeLike(io.kubernetes.client.openapi.models.V1FlexPersistentVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildFlocker instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1FlockerVolumeSource getFlocker();
    public io.kubernetes.client.openapi.models.V1FlockerVolumeSource buildFlocker();
    public A withFlocker(io.kubernetes.client.openapi.models.V1FlockerVolumeSource flocker);
    public java.lang.Boolean hasFlocker();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlockerNested<A> withNewFlocker();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlockerNested<A> withNewFlockerLike(io.kubernetes.client.openapi.models.V1FlockerVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlockerNested<A> editFlocker();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlockerNested<A> editOrNewFlocker();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlockerNested<A> editOrNewFlockerLike(io.kubernetes.client.openapi.models.V1FlockerVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildGcePersistentDisk instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1GCEPersistentDiskVolumeSource getGcePersistentDisk();
    public io.kubernetes.client.openapi.models.V1GCEPersistentDiskVolumeSource buildGcePersistentDisk();
    public A withGcePersistentDisk(io.kubernetes.client.openapi.models.V1GCEPersistentDiskVolumeSource gcePersistentDisk);
    public java.lang.Boolean hasGcePersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GcePersistentDiskNested<A> withNewGcePersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GcePersistentDiskNested<A> withNewGcePersistentDiskLike(io.kubernetes.client.openapi.models.V1GCEPersistentDiskVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GcePersistentDiskNested<A> editGcePersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GcePersistentDiskNested<A> editOrNewGcePersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GcePersistentDiskNested<A> editOrNewGcePersistentDiskLike(io.kubernetes.client.openapi.models.V1GCEPersistentDiskVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildGlusterfs instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1GlusterfsPersistentVolumeSource getGlusterfs();
    public io.kubernetes.client.openapi.models.V1GlusterfsPersistentVolumeSource buildGlusterfs();
    public A withGlusterfs(io.kubernetes.client.openapi.models.V1GlusterfsPersistentVolumeSource glusterfs);
    public java.lang.Boolean hasGlusterfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GlusterfsNested<A> withNewGlusterfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GlusterfsNested<A> withNewGlusterfsLike(io.kubernetes.client.openapi.models.V1GlusterfsPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GlusterfsNested<A> editGlusterfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GlusterfsNested<A> editOrNewGlusterfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GlusterfsNested<A> editOrNewGlusterfsLike(io.kubernetes.client.openapi.models.V1GlusterfsPersistentVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildHostPath instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1HostPathVolumeSource getHostPath();
    public io.kubernetes.client.openapi.models.V1HostPathVolumeSource buildHostPath();
    public A withHostPath(io.kubernetes.client.openapi.models.V1HostPathVolumeSource hostPath);
    public java.lang.Boolean hasHostPath();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.HostPathNested<A> withNewHostPath();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.HostPathNested<A> withNewHostPathLike(io.kubernetes.client.openapi.models.V1HostPathVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.HostPathNested<A> editHostPath();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.HostPathNested<A> editOrNewHostPath();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.HostPathNested<A> editOrNewHostPathLike(io.kubernetes.client.openapi.models.V1HostPathVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildIscsi instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1ISCSIPersistentVolumeSource getIscsi();
    public io.kubernetes.client.openapi.models.V1ISCSIPersistentVolumeSource buildIscsi();
    public A withIscsi(io.kubernetes.client.openapi.models.V1ISCSIPersistentVolumeSource iscsi);
    public java.lang.Boolean hasIscsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.IscsiNested<A> withNewIscsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.IscsiNested<A> withNewIscsiLike(io.kubernetes.client.openapi.models.V1ISCSIPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.IscsiNested<A> editIscsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.IscsiNested<A> editOrNewIscsi();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.IscsiNested<A> editOrNewIscsiLike(io.kubernetes.client.openapi.models.V1ISCSIPersistentVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildLocal instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1LocalVolumeSource getLocal();
    public io.kubernetes.client.openapi.models.V1LocalVolumeSource buildLocal();
    public A withLocal(io.kubernetes.client.openapi.models.V1LocalVolumeSource local);
    public java.lang.Boolean hasLocal();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.LocalNested<A> withNewLocal();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.LocalNested<A> withNewLocalLike(io.kubernetes.client.openapi.models.V1LocalVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.LocalNested<A> editLocal();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.LocalNested<A> editOrNewLocal();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.LocalNested<A> editOrNewLocalLike(io.kubernetes.client.openapi.models.V1LocalVolumeSource item);
    public A addToMountOptions(int index,java.lang.String item);
    public A setToMountOptions(int index,java.lang.String item);
    public A addToMountOptions(java.lang.String... items);
    public A addAllToMountOptions(java.util.Collection<java.lang.String> items);
    public A removeFromMountOptions(java.lang.String... items);
    public A removeAllFromMountOptions(java.util.Collection<java.lang.String> items);
    public java.util.List<java.lang.String> getMountOptions();
    public java.lang.String getMountOption(int index);
    public java.lang.String getFirstMountOption();
    public java.lang.String getLastMountOption();
    public java.lang.String getMatchingMountOption(java.util.function.Predicate<java.lang.String> predicate);
    public java.lang.Boolean hasMatchingMountOption(java.util.function.Predicate<java.lang.String> predicate);
    public A withMountOptions(java.util.List<java.lang.String> mountOptions);
    public A withMountOptions(java.lang.String... mountOptions);
    public java.lang.Boolean hasMountOptions();
    public A addNewMountOption(java.lang.String original);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildNfs instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1NFSVolumeSource getNfs();
    public io.kubernetes.client.openapi.models.V1NFSVolumeSource buildNfs();
    public A withNfs(io.kubernetes.client.openapi.models.V1NFSVolumeSource nfs);
    public java.lang.Boolean hasNfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NfsNested<A> withNewNfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NfsNested<A> withNewNfsLike(io.kubernetes.client.openapi.models.V1NFSVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NfsNested<A> editNfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NfsNested<A> editOrNewNfs();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NfsNested<A> editOrNewNfsLike(io.kubernetes.client.openapi.models.V1NFSVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildNodeAffinity instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1VolumeNodeAffinity getNodeAffinity();
    public io.kubernetes.client.openapi.models.V1VolumeNodeAffinity buildNodeAffinity();
    public A withNodeAffinity(io.kubernetes.client.openapi.models.V1VolumeNodeAffinity nodeAffinity);
    public java.lang.Boolean hasNodeAffinity();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NodeAffinityNested<A> withNewNodeAffinity();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NodeAffinityNested<A> withNewNodeAffinityLike(io.kubernetes.client.openapi.models.V1VolumeNodeAffinity item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NodeAffinityNested<A> editNodeAffinity();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NodeAffinityNested<A> editOrNewNodeAffinity();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NodeAffinityNested<A> editOrNewNodeAffinityLike(io.kubernetes.client.openapi.models.V1VolumeNodeAffinity item);
    public java.lang.String getPersistentVolumeReclaimPolicy();
    public A withPersistentVolumeReclaimPolicy(java.lang.String persistentVolumeReclaimPolicy);
    public java.lang.Boolean hasPersistentVolumeReclaimPolicy();
    
    @java.lang.Deprecated
        
    /**
     * Method is deprecated. use withPersistentVolumeReclaimPolicy instead.
     */
        public A withNewPersistentVolumeReclaimPolicy(java.lang.String original);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildPhotonPersistentDisk instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1PhotonPersistentDiskVolumeSource getPhotonPersistentDisk();
    public io.kubernetes.client.openapi.models.V1PhotonPersistentDiskVolumeSource buildPhotonPersistentDisk();
    public A withPhotonPersistentDisk(io.kubernetes.client.openapi.models.V1PhotonPersistentDiskVolumeSource photonPersistentDisk);
    public java.lang.Boolean hasPhotonPersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PhotonPersistentDiskNested<A> withNewPhotonPersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PhotonPersistentDiskNested<A> withNewPhotonPersistentDiskLike(io.kubernetes.client.openapi.models.V1PhotonPersistentDiskVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PhotonPersistentDiskNested<A> editPhotonPersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PhotonPersistentDiskNested<A> editOrNewPhotonPersistentDisk();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PhotonPersistentDiskNested<A> editOrNewPhotonPersistentDiskLike(io.kubernetes.client.openapi.models.V1PhotonPersistentDiskVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildPortworxVolume instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1PortworxVolumeSource getPortworxVolume();
    public io.kubernetes.client.openapi.models.V1PortworxVolumeSource buildPortworxVolume();
    public A withPortworxVolume(io.kubernetes.client.openapi.models.V1PortworxVolumeSource portworxVolume);
    public java.lang.Boolean hasPortworxVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PortworxVolumeNested<A> withNewPortworxVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PortworxVolumeNested<A> withNewPortworxVolumeLike(io.kubernetes.client.openapi.models.V1PortworxVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PortworxVolumeNested<A> editPortworxVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PortworxVolumeNested<A> editOrNewPortworxVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PortworxVolumeNested<A> editOrNewPortworxVolumeLike(io.kubernetes.client.openapi.models.V1PortworxVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildQuobyte instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1QuobyteVolumeSource getQuobyte();
    public io.kubernetes.client.openapi.models.V1QuobyteVolumeSource buildQuobyte();
    public A withQuobyte(io.kubernetes.client.openapi.models.V1QuobyteVolumeSource quobyte);
    public java.lang.Boolean hasQuobyte();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.QuobyteNested<A> withNewQuobyte();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.QuobyteNested<A> withNewQuobyteLike(io.kubernetes.client.openapi.models.V1QuobyteVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.QuobyteNested<A> editQuobyte();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.QuobyteNested<A> editOrNewQuobyte();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.QuobyteNested<A> editOrNewQuobyteLike(io.kubernetes.client.openapi.models.V1QuobyteVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildRbd instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1RBDPersistentVolumeSource getRbd();
    public io.kubernetes.client.openapi.models.V1RBDPersistentVolumeSource buildRbd();
    public A withRbd(io.kubernetes.client.openapi.models.V1RBDPersistentVolumeSource rbd);
    public java.lang.Boolean hasRbd();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.RbdNested<A> withNewRbd();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.RbdNested<A> withNewRbdLike(io.kubernetes.client.openapi.models.V1RBDPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.RbdNested<A> editRbd();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.RbdNested<A> editOrNewRbd();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.RbdNested<A> editOrNewRbdLike(io.kubernetes.client.openapi.models.V1RBDPersistentVolumeSource item);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildScaleIO instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1ScaleIOPersistentVolumeSource getScaleIO();
    public io.kubernetes.client.openapi.models.V1ScaleIOPersistentVolumeSource buildScaleIO();
    public A withScaleIO(io.kubernetes.client.openapi.models.V1ScaleIOPersistentVolumeSource scaleIO);
    public java.lang.Boolean hasScaleIO();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ScaleIONested<A> withNewScaleIO();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ScaleIONested<A> withNewScaleIOLike(io.kubernetes.client.openapi.models.V1ScaleIOPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ScaleIONested<A> editScaleIO();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ScaleIONested<A> editOrNewScaleIO();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ScaleIONested<A> editOrNewScaleIOLike(io.kubernetes.client.openapi.models.V1ScaleIOPersistentVolumeSource item);
    public java.lang.String getStorageClassName();
    public A withStorageClassName(java.lang.String storageClassName);
    public java.lang.Boolean hasStorageClassName();
    
    @java.lang.Deprecated
        
    /**
     * Method is deprecated. use withStorageClassName instead.
     */
        public A withNewStorageClassName(java.lang.String original);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildStorageos instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1StorageOSPersistentVolumeSource getStorageos();
    public io.kubernetes.client.openapi.models.V1StorageOSPersistentVolumeSource buildStorageos();
    public A withStorageos(io.kubernetes.client.openapi.models.V1StorageOSPersistentVolumeSource storageos);
    public java.lang.Boolean hasStorageos();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.StorageosNested<A> withNewStorageos();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.StorageosNested<A> withNewStorageosLike(io.kubernetes.client.openapi.models.V1StorageOSPersistentVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.StorageosNested<A> editStorageos();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.StorageosNested<A> editOrNewStorageos();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.StorageosNested<A> editOrNewStorageosLike(io.kubernetes.client.openapi.models.V1StorageOSPersistentVolumeSource item);
    public java.lang.String getVolumeMode();
    public A withVolumeMode(java.lang.String volumeMode);
    public java.lang.Boolean hasVolumeMode();
    
    @java.lang.Deprecated
        
    /**
     * Method is deprecated. use withVolumeMode instead.
     */
        public A withNewVolumeMode(java.lang.String original);
    
    @java.lang.Deprecated
        
    /**
     * This method has been deprecated, please use method buildVsphereVolume instead.
     * @return The buildable object.
     */
        public io.kubernetes.client.openapi.models.V1VsphereVirtualDiskVolumeSource getVsphereVolume();
    public io.kubernetes.client.openapi.models.V1VsphereVirtualDiskVolumeSource buildVsphereVolume();
    public A withVsphereVolume(io.kubernetes.client.openapi.models.V1VsphereVirtualDiskVolumeSource vsphereVolume);
    public java.lang.Boolean hasVsphereVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.VsphereVolumeNested<A> withNewVsphereVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.VsphereVolumeNested<A> withNewVsphereVolumeLike(io.kubernetes.client.openapi.models.V1VsphereVirtualDiskVolumeSource item);
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.VsphereVolumeNested<A> editVsphereVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.VsphereVolumeNested<A> editOrNewVsphereVolume();
    public io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.VsphereVolumeNested<A> editOrNewVsphereVolumeLike(io.kubernetes.client.openapi.models.V1VsphereVirtualDiskVolumeSource item);
    public interface AwsElasticBlockStoreNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1AWSElasticBlockStoreVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AwsElasticBlockStoreNested<N>> {

            public N and();
            public N endAwsElasticBlockStore();    }


    public interface AzureDiskNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1AzureDiskVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureDiskNested<N>> {

            public N and();
            public N endAzureDisk();    }


    public interface AzureFileNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1AzureFilePersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.AzureFileNested<N>> {

            public N and();
            public N endAzureFile();    }


    public interface CephfsNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1CephFSPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CephfsNested<N>> {

            public N and();
            public N endCephfs();    }


    public interface CinderNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1CinderPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CinderNested<N>> {

            public N and();
            public N endCinder();    }


    public interface ClaimRefNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1ObjectReferenceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ClaimRefNested<N>> {

            public N and();
            public N endClaimRef();    }


    public interface CsiNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1CSIPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.CsiNested<N>> {

            public N and();
            public N endCsi();    }


    public interface FcNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1FCVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FcNested<N>> {

            public N and();
            public N endFc();    }


    public interface FlexVolumeNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1FlexPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlexVolumeNested<N>> {

            public N and();
            public N endFlexVolume();    }


    public interface FlockerNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1FlockerVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.FlockerNested<N>> {

            public N and();
            public N endFlocker();    }


    public interface GcePersistentDiskNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1GCEPersistentDiskVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GcePersistentDiskNested<N>> {

            public N and();
            public N endGcePersistentDisk();    }


    public interface GlusterfsNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1GlusterfsPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.GlusterfsNested<N>> {

            public N and();
            public N endGlusterfs();    }


    public interface HostPathNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1HostPathVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.HostPathNested<N>> {

            public N and();
            public N endHostPath();    }


    public interface IscsiNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1ISCSIPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.IscsiNested<N>> {

            public N and();
            public N endIscsi();    }


    public interface LocalNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1LocalVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.LocalNested<N>> {

            public N and();
            public N endLocal();    }


    public interface NfsNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1NFSVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NfsNested<N>> {

            public N and();
            public N endNfs();    }


    public interface NodeAffinityNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1VolumeNodeAffinityFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.NodeAffinityNested<N>> {

            public N and();
            public N endNodeAffinity();    }


    public interface PhotonPersistentDiskNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1PhotonPersistentDiskVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PhotonPersistentDiskNested<N>> {

            public N and();
            public N endPhotonPersistentDisk();    }


    public interface PortworxVolumeNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1PortworxVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.PortworxVolumeNested<N>> {

            public N and();
            public N endPortworxVolume();    }


    public interface QuobyteNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1QuobyteVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.QuobyteNested<N>> {

            public N and();
            public N endQuobyte();    }


    public interface RbdNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1RBDPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.RbdNested<N>> {

            public N and();
            public N endRbd();    }


    public interface ScaleIONested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1ScaleIOPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.ScaleIONested<N>> {

            public N and();
            public N endScaleIO();    }


    public interface StorageosNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1StorageOSPersistentVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.StorageosNested<N>> {

            public N and();
            public N endStorageos();    }


    public interface VsphereVolumeNested<N> extends io.kubernetes.client.fluent.Nested<N>,io.kubernetes.client.openapi.models.V1VsphereVirtualDiskVolumeSourceFluent<io.kubernetes.client.openapi.models.V1PersistentVolumeSpecFluent.VsphereVolumeNested<N>> {

            public N and();
            public N endVsphereVolume();    }


}
